﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using Site_IEQ.IEQ_DAL.DsGrupoDeptoTableAdapters;
using System.IO;
using System.Web.UI.WebControls;
using System.Drawing.Imaging;

namespace Site_IEQ.IEQ_DAL
{
    public class IEQ_Login
    {
        public IEQ_Login()
        {
        }
        /// <summary>
        /// Executa Login do Usuário
        /// </summary>
        /// <param name="user_name"> Nome de usuário</param>
        /// <param name="user_pass">Senha</param>
        /// <returns>Boolean: True: Válido / False: Inválido</returns>
        /// <exception cref="Exception">Erro durante acesso ao banco</exception>
        public bool ExecuteLogin(string user_name, string user_pass)
        {
            ServerDataAcces dataAccess = new ServerDataAcces();
            try
            {
                return dataAccess.ValidateLogin(user_name, user_pass);
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }
    }

    public class IEQ_Data
    {
        public IEQ_Data()
        {
        }

        public static DsGrupoDepto dsGrupoDepto
        {
            get
            {
                DsGrupoDeptoTableAdapters.IEQ_GRUPO_DEPTOTableAdapter daGrupo = new IEQ_GRUPO_DEPTOTableAdapter();
                DsGrupoDeptoTableAdapters.IEQ_AGENDATableAdapter daAgenda = new IEQ_AGENDATableAdapter();
                _dsGrupoDepto.Tables.Add(daGrupo.GetData());
                _dsGrupoDepto.Tables.Add(daAgenda.GetData());
                return _dsGrupoDepto;
            }
        } private static DsGrupoDepto _dsGrupoDepto;

        public static DsGrupoDepto.IEQ_GRUPO_DEPTODataTable GetAllGrupoDepto()
        {
            DsGrupoDepto.IEQ_GRUPO_DEPTODataTable dtResult = new DsGrupoDepto.IEQ_GRUPO_DEPTODataTable();
            DsGrupoDeptoTableAdapters.IEQ_GRUPO_DEPTOTableAdapter da = new IEQ_GRUPO_DEPTOTableAdapter();
            da.Fill(dtResult);
            return dtResult;
        }

        public static DsGrupoDepto.IEQ_GRUPO_DEPTORow GetGrupoDeptoRow(string grupo_depto)
        {
            DsGrupoDepto.IEQ_GRUPO_DEPTODataTable dtResult = new DsGrupoDepto.IEQ_GRUPO_DEPTODataTable();
            DsGrupoDeptoTableAdapters.IEQ_GRUPO_DEPTOTableAdapter da = new IEQ_GRUPO_DEPTOTableAdapter();
            if (da.FillByNome(dtResult, grupo_depto) > 0)          
                return dtResult[0];
            return dtResult.NewIEQ_GRUPO_DEPTORow();
        }

        public DataTable GetGrupoDepto(string grupo_depto)
        {
            DataTable dtResult = new DataTable("dtResult");

            ServerDataAcces dataAccess = new ServerDataAcces();
            string query = String.Format("SELECT * FROM IEQ_GRUPO_DEPTO WHERE NOME = '{0}'", grupo_depto);
            dtResult = dataAccess.Select(query);

            return dtResult;
        }

        public String GetNomeGrupoDeptoByUser(string nome_usuario)
        {
            DataTable dtResult = new DataTable("dtResult");

            ServerDataAcces dataAccess = new ServerDataAcces();
            string query = String.Format("SELECT IEQ_GRUPO_DEPTO.NOME ");
            query += String.Format("FROM IEQ_GRUPO_DEPTO INNER JOIN IEQ_USERS ON (IEQ_GRUPO_DEPTO.ID_GRUPO_DEPTO = IEQ_USERS.USER_GRUPO_DEPTO ");
            query += String.Format("WHERE IEQ_USERS.USER_NAME = '{0}'", nome_usuario);
            dtResult = dataAccess.Select(query);

            if (dtResult.Rows.Count > 0)
                return dtResult.Rows[0]["NOME"].ToString();
            else
                return "admin";           

        }

        public Boolean UpdateGrupoDpto(DsGrupoDepto.IEQ_GRUPO_DEPTODataTable grupo_depto)
        {
            IEQ_GRUPO_DEPTOTableAdapter da = new DsGrupoDeptoTableAdapters.IEQ_GRUPO_DEPTOTableAdapter();            
            if (da.Update(grupo_depto) > 0)
                return true;
            else
                return false;
        }

        public Boolean UpdateAgenda(DsGrupoDepto.IEQ_AGENDADataTable agenda)
        {
            IEQ_AGENDATableAdapter da = new DsGrupoDeptoTableAdapters.IEQ_AGENDATableAdapter();
            if (da.Update(agenda) > 0)
                return true;
            else
                return false;
        }

        public int GetGrupoDeptoID(string nome)
        {
            IEQ_GRUPO_DEPTOTableAdapter da = new DsGrupoDeptoTableAdapters.IEQ_GRUPO_DEPTOTableAdapter();
            DsGrupoDepto.IEQ_GRUPO_DEPTODataTable dt = da.GetDataByNome(nome);
            foreach (DsGrupoDepto.IEQ_GRUPO_DEPTORow row in dt.Rows)
            {
                if (row.NOME.Equals(nome))
                    return row.ID_GRUPO_DEPTO;
            }

            return -1;
        }

        public static DsGrupoDepto.IEQ_AGENDADataTable GetAgendaGrupoDepto(string grupo)
        {
            IEQ_AGENDATableAdapter da = new DsGrupoDeptoTableAdapters.IEQ_AGENDATableAdapter();
            DsGrupoDepto.IEQ_AGENDADataTable dt = new DsGrupoDepto.IEQ_AGENDADataTable();
            da.Fill(dt);
            return dt;
        }

    }

    public class IEQ_Utils
    {
        public static Image ByteArrayToImage(byte[] data)
        {
            MemoryStream ms = new MemoryStream(data);
            System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(ms);
            return (Image)bitmap.Clone();
        }
    }

    public static class ImageHelper
    {

        public static ImageFormat GetContentType(byte[] imageBytes)
        {
            MemoryStream ms = new MemoryStream(imageBytes);

            using (BinaryReader br = new BinaryReader(ms))
            {
                int maxMagicBytesLength = imageFormatDecoders.Keys.OrderByDescending(x => x.Length).First().Length;

                byte[] magicBytes = new byte[maxMagicBytesLength];

                for (int i = 0; i < maxMagicBytesLength; i += 1)
                {
                    magicBytes[i] = br.ReadByte();

                    foreach (var kvPair in imageFormatDecoders)
                    {
                        if (magicBytes.StartsWith(kvPair.Key))
                        {
                            return kvPair.Value;
                        }
                    }
                }

                throw new ArgumentException("Could not recognise image format", "binaryReader");
            }
        }

        private static bool StartsWith(this byte[] thisBytes, byte[] thatBytes)
        {
            for (int i = 0; i < thatBytes.Length; i += 1)
            {
                if (thisBytes[i] != thatBytes[i])
                {
                    return false;
                }
            }
            return true;
        }

        private static Dictionary<byte[], ImageFormat> imageFormatDecoders = new Dictionary<byte[], ImageFormat>()
        {
            { new byte[]{ 0x42, 0x4D }, ImageFormat.Bmp},
            { new byte[]{ 0x47, 0x49, 0x46, 0x38, 0x37, 0x61 }, ImageFormat.Gif },
            { new byte[]{ 0x47, 0x49, 0x46, 0x38, 0x39, 0x61 }, ImageFormat.Gif },
            { new byte[]{ 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A }, ImageFormat.Png },
            { new byte[]{ 0xff, 0xd8 }, ImageFormat.Jpeg }
        };
    }
}
    
